const http = require('http');

//中间层 不会跨域(只有浏览器才存在跨域问题)
let client = http.request({
  hostname: 'localhost'
  , port: 3000
  , headers: {
    a: 123
    // ,'Content-Type':'application/x-www-form-urlencoded'
    // ,'Content-Type':'application/json'
    ,'Content-Type':'text/plain'
  }
  , method: "post"
}, (res) => { //只有一个参数
  //注意是res，so res其实是一个双工流
  res.on('data', (chunk) => {
    console.log(chunk.toString()); //emmm 我们这里模拟的返回数据很小 就没有先push 再在end里toString了
  });
});

//等价于上面的第二个参数的回调
/*client.on('response', (res) => {

});*/


//TODO 调用 req.end()。 使用 http.request() 时，必须始终调用 req.end() 来表示请求的结束，即使没有数据被写入请求主体。

//写入一些内容
//TODO case1
/*client.write('{"x":1}');
client.end();*/


//TODO case2
//发送的请求体内容是随意的，这样就有一个问题，服务端到底该怎么解析？ 是把它当普通的字符串呢？还是json呢？还是表单格式呢(a=1&b=2)？
//这个时候就需要设置Content-type
// client.write('a=1&b=2'); //2
// client.write('{"a":1,"b":2}'); //1
/*client.write('abc'); //abc
client.end();*/

client.write('<%你好'); //abc //可写流 默认如果是字符串 会以utf8的形式转换成buffer
client.end();


//req.abort(); //req即上面的client

//如果请求过程中出错了，会触发error事件
// request.on('error',function(err){});

//建立连接过程中，为该连接分配端口时，触发socket事件
/*
req.on('socket',function(socket){
  socket.setTimeout(1000);
  socket.on('timeout',function(){req.abort()});
});*/

//等同于 http.request将method置为GET，并且调用client.end()
// http.get(options,callback);
